<?php

namespace Agp\CoreBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Bondcs\Rede\Authorization;

/**
 * Agp\CoreBundle\Entity\EventoConfig
 *
 * @ORM\Table(name="evento_config")
 * @ORM\Entity(repositoryClass="Agp\CoreBundle\Repository\EventoConfigRepository")
 * @ORM\HasLifecycleCallbacks
 * 
 */
class EventoConfig
{
    /**
     * @var integer $codEventoConfig
     *
     * @ORM\Column(name="cod_evento_config", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     * 
     */
    protected $codEventoConfig;
    
    /**
     *
     * @ORM\Column(name="taxa_terminal", type="float", nullable=true)
     * @Assert\NotBlank()
     * 
     */
    protected $taxaTerminal;
    
    /**
     *
     * @ORM\Column(name="taxa_cancelado", type="float", nullable=true)
     *  @Assert\NotBlank()
     * 
     */
    protected $taxaCancelado;
    
    /**
     *
     * @ORM\Column(name="taxa_cortesia", type="float", nullable=true)
     *  @Assert\NotBlank()
     * 
     */
    protected $taxaCortesia;
    
    /**
     * @ORM\Column(name="incluir_no_preco_terminal", type="boolean", nullable=true)
     */
    protected $incluirNoPrecoTerminal;
    
    /**
     *
     * @ORM\Column(name="taxa_venda_online", type="float", nullable=true)
     *  @Assert\NotBlank()
     * 
     */
    protected $taxaVendaOnline;
    
    /**
     * @ORM\Column(name="incluir_no_preco_online", type="boolean", nullable=true)
     * 
     */
    protected $incluirNoPrecoOnline;
    
    const POS_DESTAQUE1 = 1;
    const POS_DESTAQUE2 = 2;
    const POS_DESTAQUE3 = 3;
    /**
     * @ORM\Column(name="posicao", type="integer", nullable=true)
     *  @Assert\NotBlank()
     */
    protected $posicao;
    
    /**
     * @ORM\Column(name="vender", type="boolean", nullable=true)
     * 
     */
    protected $vender;
    
    /**
     * @ORM\Column(name="permitir", type="boolean", nullable=true)
     * 
     */
    protected $permitir;
    
    /**
     * @ORM\Column(name="nm_parcela", type="integer", nullable=true)
     * @Assert\NotBlank()
     */
    protected $nmParcela;
    
    /**
     * @ORM\OneToOne(targetEntity="Agp\CoreBundle\Entity\Evento", mappedBy="eventoConfig")
     * @var object
     */
    protected $evento;
    
    const TP_LOJA = 'Loja'; // sem juros porém a loja recebe parcelado
    const TP_ESTABELECIMENTO = 'Estabelecimento'; // com juros porém recebe a avista;
            
    /**
     * @ORM\Column(name="tipo_parcelamento", type="string", nullable=true)
     * @Assert\NotBlank()
     */
    protected $tipoParcelamento;
    
    /**
     * @ORM\Column(name="boleto", type="boolean", nullable=true)
     * 
     */
    protected $boleto;
    
    public function __construct() {
        $this->incluirNoPrecoTerminal = true;
        $this->incluirNoPrecoOnline = false;
        $this->vender = true;
        $this->permitir = false;
        $this->posicao = self::POS_DESTAQUE2;
        $this->taxaEvento = 10;
        $this->taxaTerminal = 1;
        $this->taxaCortesia = 0.75;
        $this->taxaCancelado = 0.50;
        $this->nmParcela = 3;
        $this->taxaVendaOnline = 10;
        $this->tipoParcelamento = self::TP_LOJA;
        $this->boleto = true;
    }

    public function getCodEventoConfig() {
        return $this->codEventoConfig;
    }

    public function setCodEventoConfig($codEventoConfig) {
        $this->codEventoConfig = $codEventoConfig;
    }

    public function getTaxaTerminal() {
        return $this->taxaTerminal;
    }

    public function setTaxaTerminal($taxaTerminal) {
        
        $this->taxaTerminal = substr(str_replace(",", ".", $taxaTerminal),3);
    }
    
    public function getTaxaVendaOnline() {
        return $this->taxaVendaOnline;
    }

    public function setTaxaVendaOnline($taxaVendaOnline) {
        $this->taxaVendaOnline = $taxaVendaOnline;
    }
    
    public function getIncluirNoPrecoTerminal() {
        return $this->incluirNoPrecoTerminal;
    }

    public function setIncluirNoPrecoTerminal($incluirNoPrecoTerminal) {
        $this->incluirNoPrecoTerminal = $incluirNoPrecoTerminal;
    }

    public function getIncluirNoPrecoOnline() { 
        return $this->incluirNoPrecoOnline;
    }

    public function setIncluirNoPrecoOnline($incluirNoPrecoOnline) {
        $this->incluirNoPrecoOnline = $incluirNoPrecoOnline;
    }

    public function getPosicao() {
        return $this->posicao;
    }

    public function setPosicao($posicao) {
        $this->posicao = $posicao;
    }

    public function getVenderEcommerce() {
        
        $hoje = new \DateTime;
        if ($this->evento->getInfo()->getDtInicio() < $hoje){
            return false;
        }
        
        return $this->vender;
    }
    
    public function getVenderBoleto() {
        
        $hoje = new \DateTime();
        $hoje->setTime(0, 0, 0);
        $hoje->add(new \DateInterval('P4D'));
        if ($this->evento->getInfo()->getDtInicio() < $hoje || $this->boleto == false){
            return false;
        }
        
        return $this->vender;
    }
    
    public function getVender() {
        return $this->vender;
    }

    public function setVender($vender) {
        $this->vender = $vender;
    }
        
    public function getTaxaCancelado() {
        return $this->taxaCancelado;
    }

    public function setTaxaCancelado($taxaCancelado) {
        $this->taxaCancelado = substr(str_replace(",", ".", $taxaCancelado),3);
    }

    public function getTaxaCortesia() {
        return $this->taxaCortesia;
    }

    public function setTaxaCortesia($taxaCortesia) {
        $this->taxaCortesia = substr(str_replace(",", ".", $taxaCortesia),3);
    }

    public static function getPosicoes(){
        return array(self::POS_DESTAQUE1 => "Destaque1",
                     self::POS_DESTAQUE2 => "Destaque2",
                     self::POS_DESTAQUE3 => "Destaque3");
    }
    
    public function getNmParcela() {
        return $this->nmParcela;
    }

    public function setNmParcela($nmParcela) {
        $this->nmParcela = $nmParcela;
    }
    
    public function getPermitir() {
        return $this->permitir;
    }

    public function setPermitir($permitir) {
        $this->permitir = $permitir;
    }
    
    public function getEvento() {
        return $this->evento;
    }

    public function setEvento($evento) {
        $this->evento = $evento;
    }

    public function getTipoParcelamento() {
        return $this->tipoParcelamento;
    }

    public function setTipoParcelamento($tipoParcelamento) {
        $this->tipoParcelamento = $tipoParcelamento;
        return $this;
    }
    
    public static function getTipoParcelamentoList(){
        return array(self::TP_LOJA => self::TP_LOJA,
                     self::TP_ESTABELECIMENTO => self::TP_ESTABELECIMENTO." (com juros)");
    }
    
    /**
     * Tipo de compra
     *
     * 2 (Parcelado loja) sem juros
     * 3 (Parcelado administradora) com juros
     *
     * @var string
     */
    public function getTipoParcelamentoRede(){
        return $this->tipoParcelamento == self::TP_ESTABELECIMENTO ? Authorization::MODALIDADE_PARCELADO_COM_JUROS : Authorization::MODALIDADE_PARCELADO_SEM_JUROS;
    }
    
    /**
     * Tipo de compra
     *
     * 2 (Parcelado loja) sem juros
     * 3 (Parcelado administradora) com juros
     * 
     * @var string
     */
    public function getTipoParcelamentoCielo(){
        return $this->tipoParcelamento == self::TP_ESTABELECIMENTO ? '3' : '2';
    }
    
    public function getBoleto() {
        return $this->boleto;
    }

    public function setBoleto($boleto) {
        $this->boleto = $boleto;
        return $this;
    }

}   